3.6.9.10 dvfma-倍精度ベクトル積和演算の基本動作
MAB内で倍精度ベクトルFMA ($ x*y+z)を行う。
code:文法
dvfma(u|d) <src_x> <src_y> <src_z> <dst_0> <dst_1>..
(u|d)は 4 個のPEのうちPE0,PE1またはPE2,PE3どちらの2PEの要素について乗算を行うかを指
定する。
uを指定した場合はPE0,PE1でxとyと掛け合わせたものを$ x* yの中間結果とし、PE2,PE3では$ x*yの中間結果を便宜的に 0 として、zとの加算を行う(以下効果においてoffset=0)。
dを指定した場合はPE2,PE3でxとyと掛け合わせたものを$ x*yの中間結果とし、PE0,PE1では$ x*yの中間結果を便宜的に 0 として、zとの加算を行う(以下効果においてoffset=2)。
第 1 入力の<src_x>、第 2 入力の<src_y>、および第 3 入力の<src_z>は読み出し元PEオペランドである。
基本動作においていずれも通常の倍精度の値で、アクセス語長は長語である。
<dst_0> [<dst_1>..]は書き込み先PEオペランドである。
演算結果は複数のPEメモリに同時に書き込むことができるが、以下効果では簡単のため単一の書き込み先としてdstを指定した例を示している。
基本動作において演算結果は通常の倍精度であり、書き込みのアクセス語長は長語である。
code:効果.py
for cycle= 0:4
forall chip,l2b,l1b,mab
LongWord dst_data4 = {0, 0, 0, 0}
for i= 0:2
LongWord src_data_x = MEMchipl2bl1bmabi+ offset.refer_pemem(src_x,cycle)
LongWord src_data_y = MEMchipl2bl1bmabi+ offset.refer_pemem(src_y,cycle)
dst_datai+ offset = src_data_x * src_data_y
forall pe
LongWord src_data_z = MEMchipl2bl1bmabpe.refer_pemem(src_z,cycle)
dst_datape += src_data_z
MEMchipl2bl1bmabpe.refer_pemem(dst,cycle) = dst_datape